using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._Visibility
{
    /// <summary>
    /// <para>Skyline</para>
    /// <para>Generates a line or multipatch feature class containing the results from a skyline or silhouette analysis.</para>
    /// <para>生成包含天际线或侧面影像分析结果的线或多面体要素类。</para>
    /// </summary>    
    [DisplayName("Skyline")]
    public class Skyline : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Skyline()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_observer_point_features">
        /// <para>Input Observer Point Features</para>
        /// <para>The 3D points representing observers. Each feature will have its own output.</para>
        /// <para>表示观察点的 3D 点。每个功能都有自己的输出。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The 3D features that will either be lines that represent the skyline or multipatches that represent silhouettes.</para>
        /// <para>3D 要素可以是表示天际线的线条，也可以是表示轮廓的多面体。</para>
        /// </param>
        public Skyline(object _in_observer_point_features, object _out_feature_class)
        {
            this._in_observer_point_features = _in_observer_point_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Skyline";

        public override string CallName => "3d.Skyline";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "configKeyword", "geographicTransformations", "outputCoordinateSystem", "terrainMemoryUsage", "workspace"];

        public override object[] ParameterInfo => [_in_observer_point_features, _out_feature_class, _in_surface, _virtual_surface_radius, _virtual_surface_elevation, _in_features, _feature_lod.GetGPValue(), _from_azimuth_value_or_field, _to_azimuth_value_or_field, _azimuth_increment_value_or_field, _max_horizon_radius, _segment_skyline.GetGPValue(), _scale_to_percent, _scale_according_to.GetGPValue(), _scale_method.GetGPValue(), _use_curvature.GetGPValue(), _use_refraction.GetGPValue(), _refraction_factor, _pyramid_level_resolution, _create_silhouettes.GetGPValue()];

        /// <summary>
        /// <para>Input Observer Point Features</para>
        /// <para>The 3D points representing observers. Each feature will have its own output.</para>
        /// <para>表示观察点的 3D 点。每个功能都有自己的输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Observer Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_observer_point_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The 3D features that will either be lines that represent the skyline or multipatches that represent silhouettes.</para>
        /// <para>3D 要素可以是表示天际线的线条，也可以是表示轮廓的多面体。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Input Surface</para>
        /// <para>The topographic surface that will be used to define the horizon. If no surface is provided, then a virtual surface will be employed using the Virtual Surface Radius and Virtual Surface Elevation parameters.</para>
        /// <para>将用于定义地平线的地形表面。如果未提供曲面，则将使用虚拟曲面半径和虚拟曲面高程参数使用虚拟曲面。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Surface")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_surface { get; set; } = null;


        /// <summary>
        /// <para>Virtual Surface Radius</para>
        /// <para><xdoc>
        ///   <para>The radius of the virtual surface that will be used to define the horizon when a topographic surface is not provided. The default is 1,000 meters.</para>
        ///   <para>The following units are supported:</para>
        ///   <bulletList>
        ///     <bullet_item>Unknown—Unknown</bullet_item><para/>
        ///     <bullet_item>Inches—Inches</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters</bullet_item><para/>
        ///     <bullet_item>Centimeters—Centimeters</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>未提供地形表面时将用于定义地平线的虚拟表面半径。默认值为 1,000 米。</para>
        ///   <para>支持以下单位：</para>
        ///   <bulletList>
        ///     <bullet_item>未知 - 未知</bullet_item><para/>
        ///     <bullet_item>英寸—英寸</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米</bullet_item><para/>
        ///     <bullet_item>厘米—厘米</bullet_item><para/>
        ///     <bullet_item>分米 - 分米</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Virtual Surface Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _virtual_surface_radius { get; set; } = "1000 Meters";


        /// <summary>
        /// <para>Virtual Surface Elevation</para>
        /// <para><xdoc>
        ///   <para>The elevation of the virtual surface for defining the horizon in lieu of an actual surface. It is ignored if an actual surface is provided. The default is 0.</para>
        ///   <para>The following units are supported:</para>
        ///   <bulletList>
        ///     <bullet_item>Unknown—Unknown</bullet_item><para/>
        ///     <bullet_item>Inches—Inches</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters</bullet_item><para/>
        ///     <bullet_item>Centimeters—Centimeters</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>虚拟曲面的高程，用于定义地平线，而不是实际曲面。如果提供了实际表面，则忽略它。默认值为 0。</para>
        ///   <para>支持以下单位：</para>
        ///   <bulletList>
        ///     <bullet_item>未知 - 未知</bullet_item><para/>
        ///     <bullet_item>英寸—英寸</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米</bullet_item><para/>
        ///     <bullet_item>厘米—厘米</bullet_item><para/>
        ///     <bullet_item>分米 - 分米</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Virtual Surface Elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _virtual_surface_elevation { get; set; } = "0 Meters";


        /// <summary>
        /// <para>Input Features</para>
        /// <para>The features used in determining the skyline. If no features are specified, then the skyline will consist solely of the horizon line as defined by the topographic or virtual surface.</para>
        /// <para>用于确定天际线的要素。如果未指定要素，则天际线将仅由地形或虚拟表面定义的地平线组成。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _in_features { get; set; } = null;


        /// <summary>
        /// <para>Feature Level of Detail</para>
        /// <para><xdoc>
        ///   <para>The level of detail at which each feature should be examined in the skyline analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Full Detail—Every edge within the feature is considered in the skyline analysis (only edges of triangles and exterior rings are considered). This time intensive operation is the most precise, and is also the default option.</bullet_item><para/>
        ///     <bullet_item>Convex Footprint—The skyline analysis will use the upper perimeter of the convex hull of each feature's footprint extruded to the elevation of the highest vertex within the feature.</bullet_item><para/>
        ///     <bullet_item>Envelope— The skyline analysis will use the perimeter of the 3-dimensional feature envelope. This is the fastest technique.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在天际线分析中应检查每个要素的详细程度。</para>
        ///   <bulletList>
        ///     <bullet_item>完整细节 - 在天际线分析中考虑要素内的每个边（仅考虑三角形和外环的边）。这种时间密集型操作是最精确的，也是默认选项。</bullet_item><para/>
        ///     <bullet_item>凸轮廓线—天际线分析将使用每个要素的轮廓线的凸包的上周长，该轮廓线被拉伸到要素内最高折点的高程。</bullet_item><para/>
        ///     <bullet_item>包络 - 天际线分析将使用 3 维要素包络的周长。这是最快的技术。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Level of Detail")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _feature_lod_value _feature_lod { get; set; } = _feature_lod_value._FULL_DETAIL;

        public enum _feature_lod_value
        {
            /// <summary>
            /// <para>Full Detail</para>
            /// <para>Full Detail—Every edge within the feature is considered in the skyline analysis (only edges of triangles and exterior rings are considered). This time intensive operation is the most precise, and is also the default option.</para>
            /// <para>完整细节 - 在天际线分析中考虑要素内的每个边（仅考虑三角形和外环的边）。这种时间密集型操作是最精确的，也是默认选项。</para>
            /// </summary>
            [Description("Full Detail")]
            [GPEnumValue("FULL_DETAIL")]
            _FULL_DETAIL,

            /// <summary>
            /// <para>Convex Footprint</para>
            /// <para>Convex Footprint—The skyline analysis will use the upper perimeter of the convex hull of each feature's footprint extruded to the elevation of the highest vertex within the feature.</para>
            /// <para>凸轮廓线—天际线分析将使用每个要素的轮廓线的凸包的上周长，该轮廓线被拉伸到要素内最高折点的高程。</para>
            /// </summary>
            [Description("Convex Footprint")]
            [GPEnumValue("CONVEX_FOOTPRINT")]
            _CONVEX_FOOTPRINT,

            /// <summary>
            /// <para>Envelope</para>
            /// <para>Envelope— The skyline analysis will use the perimeter of the 3-dimensional feature envelope. This is the fastest technique.</para>
            /// <para>包络 - 天际线分析将使用 3 维要素包络的周长。这是最快的技术。</para>
            /// </summary>
            [Description("Envelope")]
            [GPEnumValue("ENVELOPE")]
            _ENVELOPE,

        }

        /// <summary>
        /// <para>From Azimuth</para>
        /// <para>The azimuth, in degrees, from which the skyline analysis should be started. The analysis starts from the observer point and goes to the right, from the From Azimuth until the To Azimuth is reached. Must be greater than minus 360 and less than 360. The default is 0.</para>
        /// <para>应从中开始天际线分析的方位角（以度为单位）。分析从观察点开始，向右移动，从“从方位角”（From Azimuth）开始，直到到达“到方位角”（To Azimuth）。必须大于负 360 且小于 360。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("From Azimuth")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_azimuth_value_or_field { get; set; } = null;


        /// <summary>
        /// <para>To Azimuth</para>
        /// <para>The direction, in degrees, at which the skyline analysis should be completed. The analysis starts from the observer point and goes to the right, from the From Azimuth until the To Azimuth is reached. Must be no more than 360 greater than the From Azimuth. The default is 360.</para>
        /// <para>应完成天际线分析的方向（以度为单位）。分析从观察点开始，向右移动，从“从方位角”（From Azimuth）开始，直到到达“到方位角”（To Azimuth）。必须不超过 360 大于“起始方位角”。默认值为 360。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Azimuth")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_azimuth_value_or_field { get; set; } = null;


        /// <summary>
        /// <para>Azimuth Increment</para>
        /// <para>The angular interval, in degrees, at which the horizon should be evaluated while conducting the skyline analysis between the From Azimuth and the To Azimuth. Must be no greater than the To Azimuth minus the From Azimuth. The default is 1.</para>
        /// <para>角间隔，以度为单位，在“从方位角”和“到方位角”之间进行天际线分析时应评估地平线。不得大于“方位角”减去“起始方位角”。默认值为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Azimuth Increment")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _azimuth_increment_value_or_field { get; set; } = null;


        /// <summary>
        /// <para>Maximum Horizon Radius</para>
        /// <para><xdoc>
        ///   <para>The maximum distance for which a horizon should be sought from the observer location. A value of zero indicates that there should be no limit imposed. The default is 0.</para>
        ///   <para>The following units are supported:</para>
        ///   <bulletList>
        ///     <bullet_item>Unknown—Unknown</bullet_item><para/>
        ///     <bullet_item>Inches—Inches</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters</bullet_item><para/>
        ///     <bullet_item>Centimeters—Centimeters</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>应从观察点位置寻找地平线的最大距离。值为零表示不应施加任何限制。默认值为 0。</para>
        ///   <para>支持以下单位：</para>
        ///   <bulletList>
        ///     <bullet_item>未知 - 未知</bullet_item><para/>
        ///     <bullet_item>英寸—英寸</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米</bullet_item><para/>
        ///     <bullet_item>厘米—厘米</bullet_item><para/>
        ///     <bullet_item>分米 - 分米</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Horizon Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _max_horizon_radius { get; set; } = "0 Meters";


        /// <summary>
        /// <para>Segment Skyline</para>
        /// <para><xdoc>
        ///   <para>Determines whether the resulting skyline will have one feature for each observer point, or if each observer's skyline will be segmented by the unique elements that contribute to the skyline.</para>
        ///   <para>If silhouettes are being generated, then this parameter will indicate whether divergent rays should be used; for sun shadows, this should generally be no or unchecked.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Each skyline feature will represent one observer. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Each observer's skyline will be segmented by the unique elements that contribute to the skyline.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定生成的天际线是否对每个观察点具有一个要素，或者每个观察点的天际线是否将按构成天际线的独特元素进行分割。</para>
        ///   <para>如果正在生成剪影，则此参数将指示是否应使用发散光线;对于太阳阴影，这通常应该是没有或未选中。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 每个天际线要素将代表一个观察点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 每个观察点的天际线将按构成天际线的独特元素进行分割。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Segment Skyline")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _segment_skyline_value _segment_skyline { get; set; } = _segment_skyline_value._false;

        public enum _segment_skyline_value
        {
            /// <summary>
            /// <para>SEGMENT_SKYLINE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SEGMENT_SKYLINE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_SEGMENT_SKYLINE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_SEGMENT_SKYLINE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Scale To Percent</para>
        /// <para>Indicates to what percent of the original vertical angle (angle above the horizon, or angle of elevation) or elevation each skyline vertex should be placed. If either 0 or 100 is entered, then no scaling will occur. The default is 100.</para>
        /// <para>指示应放置每个天际线顶点的原始垂直角（地平线上方的角度或仰角）或高程的百分比。如果输入 0 或 100，则不会发生缩放。默认值为 100。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Scale To Percent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _scale_to_percent { get; set; } = 100;


        /// <summary>
        /// <para>Scale According To</para>
        /// <para><xdoc>
        ///   <para>The values according to which the scaling should be determined.</para>
        ///   <bulletList>
        ///     <bullet_item>Vertical Angle From Observer—Scaling is done by considering the vertical angle of each vertex relative to the observer point. This is the default.</bullet_item><para/>
        ///     <bullet_item>Elevation—Scaling is done by considering the elevation of each vertex relative to the observer point.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定缩放所依据的值。</para>
        ///   <bulletList>
        ///     <bullet_item>与观察点的垂直角度 - 通过考虑每个顶点相对于观察点的垂直角度来完成缩放。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>高程 - 通过考虑每个折点相对于观察点的高程来完成缩放。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Scale According To")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _scale_according_to_value _scale_according_to { get; set; } = _scale_according_to_value._VERTICAL_ANGLE;

        public enum _scale_according_to_value
        {
            /// <summary>
            /// <para>Vertical Angle From Observer</para>
            /// <para>Vertical Angle From Observer—Scaling is done by considering the vertical angle of each vertex relative to the observer point. This is the default.</para>
            /// <para>与观察点的垂直角度 - 通过考虑每个顶点相对于观察点的垂直角度来完成缩放。这是默认设置。</para>
            /// </summary>
            [Description("Vertical Angle From Observer")]
            [GPEnumValue("VERTICAL_ANGLE")]
            _VERTICAL_ANGLE,

            /// <summary>
            /// <para>Elevation</para>
            /// <para>Elevation—Scaling is done by considering the elevation of each vertex relative to the observer point.</para>
            /// <para>高程 - 通过考虑每个折点相对于观察点的高程来完成缩放。</para>
            /// </summary>
            [Description("Elevation")]
            [GPEnumValue("ELEVATION")]
            _ELEVATION,

        }

        /// <summary>
        /// <para>Scale Method</para>
        /// <para><xdoc>
        ///   <para>The vertex to be used to calculate against.</para>
        ///   <bulletList>
        ///     <bullet_item>Skyline Maximum—Vertices will be scaled relative to the vertical angle (or the elevation) of the vertex with the highest vertical angle (or elevation). This is the default.</bullet_item><para/>
        ///     <bullet_item>Each Vertex—Vertices will be scaled relative to the original vertical angle (or elevation) of each vertex.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于计算的顶点。</para>
        ///   <bulletList>
        ///     <bullet_item>天际线最大值 - 折点将相对于具有最高垂直角度（或高程）的顶点的垂直角度（或高程）进行缩放。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>每个顶点 - 顶点将相对于每个折点的原始垂直角度（或高程）进行缩放。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Scale Method")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _scale_method_value _scale_method { get; set; } = _scale_method_value._SKYLINE_MAXIMUM;

        public enum _scale_method_value
        {
            /// <summary>
            /// <para>Skyline Maximum</para>
            /// <para>Skyline Maximum—Vertices will be scaled relative to the vertical angle (or the elevation) of the vertex with the highest vertical angle (or elevation). This is the default.</para>
            /// <para>天际线最大值 - 折点将相对于具有最高垂直角度（或高程）的顶点的垂直角度（或高程）进行缩放。这是默认设置。</para>
            /// </summary>
            [Description("Skyline Maximum")]
            [GPEnumValue("SKYLINE_MAXIMUM")]
            _SKYLINE_MAXIMUM,

            /// <summary>
            /// <para>Each Vertex</para>
            /// <para>Each Vertex—Vertices will be scaled relative to the original vertical angle (or elevation) of each vertex.</para>
            /// <para>每个顶点 - 顶点将相对于每个折点的原始垂直角度（或高程）进行缩放。</para>
            /// </summary>
            [Description("Each Vertex")]
            [GPEnumValue("EACH_VERTEX")]
            _EACH_VERTEX,

        }

        /// <summary>
        /// <para>Use Curvature</para>
        /// <para><xdoc>
        ///   <para>Indicates whether the earth's curvature should be taken into consideration when generating the ridgeline from a functional surface.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The earth's curvature will not be taken into consideration. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The earth's curvature will be taken into consideration.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示从功能表面生成山脊线时是否应考虑地球曲率。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不考虑地球的曲率。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将考虑地球的曲率。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Curvature")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_curvature_value _use_curvature { get; set; } = _use_curvature_value._false;

        public enum _use_curvature_value
        {
            /// <summary>
            /// <para>CURVATURE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CURVATURE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CURVATURE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CURVATURE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Use Refraction</para>
        /// <para><xdoc>
        ///   <para>Indicates whether atmospheric refraction will be applied when generating the ridgeline from a functional surface.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Atmospheric refraction will not be taken into consideration. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Atmospheric refraction will be taken into consideration.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示从功能表面生成山脊线时是否应用大气折射。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不考虑大气折射。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将考虑大气折射。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Refraction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_refraction_value _use_refraction { get; set; } = _use_refraction_value._false;

        public enum _use_refraction_value
        {
            /// <summary>
            /// <para>REFRACTION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REFRACTION")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_REFRACTION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_REFRACTION")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Refraction Factor</para>
        /// <para>The refraction coefficient to be used if atmospheric refraction is being considered. The default is 0.13.</para>
        /// <para>考虑大气折射时要使用的折射系数。默认值为 0.13。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Refraction Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _refraction_factor { get; set; } = 0.13;


        /// <summary>
        /// <para>Pyramid Level Resolution</para>
        /// <para>The z-tolerance or window-size resolution of the terrain pyramid level that will be used by this tool. The default is 0, or full resolution.</para>
        /// <para>此工具将使用的地形金字塔关卡的 z 容差或窗口大小分辨率。默认值为 0，即全分辨率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pyramid Level Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _pyramid_level_resolution { get; set; } = 0;


        /// <summary>
        /// <para>Create Silhouettes</para>
        /// <para><xdoc>
        ///   <para>Specifies whether output features will represent skylines or silhouettes.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The output will be created as polyline features that represent the skyline. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The output will be created as multipatch features that represent silhouettes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出要素是表示天际线还是侧面影像。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 输出将创建为表示天际线的折线要素。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 输出将创建为表示影像的多面体要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Create Silhouettes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _create_silhouettes_value _create_silhouettes { get; set; } = _create_silhouettes_value._false;

        public enum _create_silhouettes_value
        {
            /// <summary>
            /// <para>CREATE_SILHOUETTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CREATE_SILHOUETTES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CREATE_SILHOUETTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CREATE_SILHOUETTES")]
            [GPEnumValue("false")]
            _false,

        }

        public Skyline SetEnv(object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object configKeyword = null, object geographicTransformations = null, object outputCoordinateSystem = null, object terrainMemoryUsage = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, configKeyword: configKeyword, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, terrainMemoryUsage: terrainMemoryUsage, workspace: workspace);
            return this;
        }

    }

}